<?php

class RutasController extends AppController {

    public function imprimir($ids = null) {
        App::import('Lib', 'FPDF/fpdf');

        $array = explode(",", $ids);
        $reduccion_zoom = 0;
        $pdf = new FPDF();

        foreach ($array as $id) {
            $data_ruta = $this->Ruta->read(null, $id);
            if (empty($data_ruta)) {
                throw new NotFoundException(__('Registro #' . $id . ' inexistente'));
            }
            
            $ruta = $this->Ruta->Query("SELECT centro, zoom FROM sub_rutas WHERE id=" . $id);
            $subsidios = $this->Ruta->Query("SELECT s.calle, s.altura, s.piso, s.barrio, s.comuna, s.nombre_solicitante, 
                                                    s.apellido_solicitante, s.telefono, s.numero, s.coordenadas
                                             FROM sub_subsidios s
                                             JOIN sub_subsidios_rutas sr ON sr.subsidio_id=s.id
                                             WHERE sr.ruta_id=" . $id . " AND s.en_ruta != 'Verificado'
                                             ORDER BY s.calle ASC, s.altura ASC");

            $data = array();
            $i = 65;
            $markers = '';

            foreach ($subsidios as $subsidio) {
                $data[chr($i)] = $subsidio['s'];
                $markers.= '&markers=label:' . chr($i) . '%7C' . $subsidio['s']['coordenadas'];
                $i++;
            }

            // Genero la imagen del mapa
            $file = md5(time() . rand()) . ".png";
            $path = WWW_ROOT . 'files' . DS . $file;
            $fp = fopen($path, 'w');
            fwrite($fp, file_get_contents('http://maps.googleapis.com/maps/api/staticmap?center=' . str_replace(" ", "", $ruta[0]['sub_rutas']['centro']) . '&zoom=' . ($ruta[0]['sub_rutas']['zoom'] - $reduccion_zoom) . '&scale=2&size=800x500&maptype=roadmap' . $markers . '&sensor=false'));
            fclose($fp);

            // Header, Datos y Mapa
            $pdf->AddPage();
            $pdf->SetFont('Arial', '', 12);
            $pdf->Image(WWW_ROOT . "img" . DS . "gcba.jpg", 50, 10, 120);

            $pdf->Ln(40);

            $pdf->Cell(40, 6, utf8_decode('Número:'), 0);
            $pdf->Cell(40, 6, utf8_decode($data_ruta['Ruta']['id']), 0);
            $pdf->Ln(10);

            $pdf->Cell(40, 6, utf8_decode('Encargado:'), 0);
            $pdf->Cell(40, 6, utf8_decode($data_ruta['Ruta']['encargado']), 0);
            $pdf->Ln(10);

            $pdf->Cell(40, 6, utf8_decode('Información:'), 0);
            $pdf->Cell(40, 6, utf8_decode($data_ruta['Ruta']['informacion']), 0);
            $pdf->Ln(10);

            $pdf->Image($path, 10, 100, 190);

            // Tabla
            $pdf->AddPage();
            $w = array(4, 45, 11, 8, 20, 12, 60, 18, 13);

            $pdf->SetFont('Arial', 'B', 9);
            $header = array('#', 'Calle', 'Altura', 'Piso', 'Barrio', 'CGPC', 'Solicitante', 'Tel.', 'Expte.');
            for ($i = 0; $i < count($header); $i++) {
                $pdf->Cell($w[$i], 7, $header[$i], 1, 0, 'C');
            }
            $pdf->Ln();

            $pdf->SetFont('Arial', '', 8);
            $pdf->SetFillColor(224, 235, 255);
            $pdf->SetTextColor(0);
            $fill = false;
            foreach ($data as $num => $row) {
                $solicitante = ($row['apellido_solicitante'] . ', ' . $row['nombre_solicitante']);
                $solicitante = strtoupper(substr(utf8_decode($solicitante), 0, 32)) . (strlen($solicitante) > 32 ? '...' : '');

                $calle = substr(utf8_decode($row['calle']), 0, 31) . (strlen($row['calle']) > 31 ? '...' : '');
                $barrio = substr($row['barrio'], 0, 13) . (strlen($row['barrio']) > 13 ? '...' : '');

                $pdf->Cell($w[0], 6, $num, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[1], 6, $calle, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[2], 6, $row['altura'], 'LR', 0, 'L', $fill);
                $pdf->Cell($w[3], 6, $row['piso'], 'LR', 0, 'L', $fill);
                $pdf->Cell($w[4], 6, $barrio, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[5], 6, $row['comuna'], 'LR', 0, 'L', $fill);
                $pdf->Cell($w[6], 6, $solicitante, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[7], 6, $row['telefono'], 'LR', 0, 'L', $fill);
                $pdf->Cell($w[8], 6, $row['numero'], 'LR', 0, 'L', $fill);
                $pdf->Ln();
                $fill = !$fill;
            }

            $pdf->Cell(array_sum($w), 0, '', 'T');

            // Elimino las imagenes creadas
            unlink($path);
        }

        // Imprimo
        $pdf->Output();
        exit(0);
    }

    public function add() {
        
    }

    public function edit($id = null) {
        if (($this->request->is('post') || $this->request->is('put')) && isset($this->request->data['Ruta']) && !isset($this->request->data['Cake']['_filter'])) {
            /*
              if ($this->request->data['Ruta']['realizada'] == "Si") {
              $this->Ruta->Query("UPDATE sub_subsidios SET en_ruta='Verificado' WHERE id IN (SELECT subsidio_id FROM sub_subsidios_rutas WHERE ruta_id=" . $id . ")");
              }
              elseif ($this->request->data['Ruta']['realizada'] == "No") {
              $this->Ruta->Query("UPDATE sub_subsidios SET en_ruta='Si' WHERE id IN (SELECT subsidio_id FROM sub_subsidios_rutas WHERE ruta_id=" . $id . ")");
              }
             */
        }

        $this->maint = getData('Rutas/RutasMaint');
        parent::edit($id);
    }

    public function index($last = false) {
        $this->search_list = getData('Rutas/RutasSL');
        parent::index($last);
    }

    public function view($id = null) {
        $this->render = array('/Rutas/view', 'default');
        $this->maint = getData('Rutas/RutasMaint');
        parent::view($id);
    }

    public function multiple($ids = null) {
        $this->maint = getData('Rutas/RutasMaint');
        $this->OP = "V";
        $registros = array();
        $model = $this->getModelName();

        // Obtengo los registros
        $array_ids = explode(",", $ids);

        foreach ($array_ids as $id) {
            // Solo IDs correctos
            if (empty($id) || !is_numeric($id)) {
                continue;
            }

            // Verifico que exista el registro
            $this->$model->id = $id;
            if (!$this->$model->exists()) {
                throw new NotFoundException(__('Registro inexistente'));
            }

            // Obtengo los datos del registro
            $row = $this->modelRowData($this->$model->read(null, $id));
            if (empty($row)) {
                throw new NotFoundException(__('Registro inexistente'));
            }

            // Renderizo los datos
            $this->renderData($id);

            $registros[$id] = array(
                'data' => $this->maint['data'],
                'row' => $row
            );
        }

        $this->set('registros', $registros);
        $this->set('return', isset($this->maint['return']) ? $this->maint['return'] : "index/last");
        $this->set('jsincludes', isset($this->maint['jsincludes']) ? $this->maint['jsincludes'] : array());
        $this->set('model', $model);
        $this->set('model_id', $ids);
    }

    public function delete($id = null) {
        // Chequea que el metodo sea POST
        if (!$this->request->is('post')) {
            throw new MethodNotAllowedException(__('Acción no autorizada a realizar.'));
        }

        // Chequea que el registro exista en la BD
        $this->Ruta->id = $id;
        if (!$this->Ruta->exists()) {
            throw new NotFoundException(__('Registro inexistente.'));
        }

        $this->Ruta->Query("UPDATE sub_subsidios SET en_ruta='No' WHERE id IN (SELECT subsidio_id FROM sub_subsidios_rutas WHERE ruta_id=" . $id . ")");
        $this->Ruta->Query("DELETE FROM sub_subsidios_rutas WHERE ruta_id=" . $id);
        parent::delete($id);
    }

}